package com.ncr.teradata.bireport;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.StringTokenizer;

/**
 * CommonFunc.java
 * 通用功能类
 *
 * @author ylpeng
 * @date Mar 8, 2007
 */
public class CommonFunc {
	/**
     * <b>摘要：  </b> 分割数据。
     * <br>
     * <b>参数：  </b> String被分割的数据，pattern分割字符。
     * <br>
     * <b>返回值：</b> 分割后的数据，返回值类型是String[]。
     */
	public static String moveToDate(String todaystr,String theFormat,int days){	
     	return convertDate(todaystr,theFormat,Calendar.DAY_OF_YEAR,days);
    }
	
    public static String[] division(String string, String pattern) {
        StringTokenizer token = new StringTokenizer(string, pattern);
        String[] value = new String[token.countTokens()];
        for (int i = 0; token.hasMoreTokens(); i++) {
            value[i] = token.nextToken();
        }
        return value;
    }
    
    /**
     * <b>摘要：  </b> 获取今天的日期。
     * <br>
     * <b>参数：  </b> theFormat设置日期输出格式，例如"yyyyMMddHHmmss"。
     * <br>
     * <b>返回值：</b> 指定格式的今天日期，返回值类型是String。
     */
    public static String getToday(String theFormat){	
    	SimpleDateFormat formatter = new SimpleDateFormat(theFormat,Locale.CHINESE);
    	Date thedate=new Date();
    	return formatter.format(thedate);
   	}
    
    /**
    * <b>摘要：  </b> 获取昨天的日期。
    * <br>
    * <b>参数：  </b> theFormat设置日期输出格式，例如"yyyyMMdd"。
    * <br>
    * <b>返回值：</b> 指定格式的昨天日期，返回值类型是String。
    */
    public static String getYesterday(String todaystr,String theFormat){	
    	SimpleDateFormat formatter = new SimpleDateFormat(theFormat,Locale.CHINESE);
    	return convertDate(todaystr,theFormat,Calendar.DAY_OF_YEAR,-1);
   	}
    

    
    /**
    * <b>摘要：  </b> 计算相对于dateStr的日期，如果转换日期为上个月同期日期  dateStr,theFormat="yyyyMMdd"，feildnum=Calendar.WEEK_OF_YEAR，thenum=-4。
    * <br>
    * <b>参数：  </b> dateStr设置参照的日期，theFormat设置参照日期格式，feildnum处理方式，thenum计算值。
    * <br>
    * <b>返回值：</b> 指定格式的相对于dateStr的日期，返回值类型是String。
    */
    public static String convertDate(String dateStr,String theFormat,int feildnum,int thenum){
    	SimpleDateFormat formatter = null;
    	Calendar cldr = null;
    	Date date_pre = null;
    	Date date1 = null;
    	try{
    		formatter = new SimpleDateFormat(theFormat,Locale.CHINESE);
    		cldr = new GregorianCalendar();
    		date1 = formatter.parse(dateStr);
    		cldr.setTime(date1);
    		cldr.add(feildnum,thenum);
    		date_pre=cldr.getTime();
    	}
    	catch(Exception e){
    		e.printStackTrace();
    	}
    	if(date_pre==null)
    		return formatter.format(date1);
    	else  
    		return formatter.format(date_pre);
	}
    
    public static String iso88591_utf8(String string){
		try{
			return new String(string.getBytes("iso-8859-1"),"utf-8");
		}
		catch(java.io.UnsupportedEncodingException ex){
			return string;
		}
	}
	
	public static String utf8_iso88591(String string){
		try{
			return new String(string.getBytes("utf-8"),"iso-8859-1");
		}
		catch(java.io.UnsupportedEncodingException ex){
			return string;
		}
	}
    
    public static void main(String[] args){
    	String str = "Billing_Cycle_Id(${DIMENSION_MAX_VALUE})";
    	System.out.println(str.substring(0,str.indexOf("(")));
    	System.out.println(str.substring(str.indexOf("{") + 1,str.indexOf("}")));
    	System.out.println(str.indexOf("B"));
    }
}
